iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 2

Day2: Kubernetes與小夥伴們的溝通之道

  • 分享至 

  • xImage
  •  

🌳 要認識Kubernetes的生態系統,先從快速建立叢集起步(Kubeadm),和叢集互動時(Kubectl)透過工具進行操作或檢視,而叢集中包含多種的Objects(persistent entities),用途為指示/呈現叢集的目標狀態,像是可用的資源、容器運行、互動規則等,常見建立的方式是提供manifest檔案(YAML格式為主)給Kubectl,Kubectl再發出API(http request)給K8s進行操作,工欲善其事,必先利其器,先來認識小夥伴們吧

🔧 建置工具- Kubeadm

Kubeadm是建立Kubernetes叢集的工具,使用目的在於快速可用,而詳細的配置或各種方便的額外功能就不在考慮範圍,使用Kubeadm建立的話,控制平台(control plane)的元件(像是etcd及apiserver等),會以Pod的形式,部署在kube-system這個命名空間(namespace)

https://ithelp.ithome.com.tw/upload/images/20240806/20168178lhtGhuWB5j.png

指令文件: Setup tool

📟 指令列工具- Kubectl

Kubectl(讀作kube control),使用Kubernetes API跟 Kubernetes 叢集的控制平台溝通,Kubectl從家目錄底下$HOME/.kube的config檔案取得相關設定內容,另外也可以透過設定kubeconfig去指定不同的配置檔案

https://ithelp.ithome.com.tw/upload/images/20240806/20168178i23YWobEgp.png

kubectl預設會先檢查是否自己是在Pod當中執行(也就是存在於叢集內)

  • KUBERNETES_SERVICE_HOST
  • KUBERNETES_SERVICE_PORT
  • service account token: 服務帳戶token,與權限有關,每個命名空間預設有一個default的服務帳戶,token位於/var/run/secrets/kubernetes.io/serviceaccount/token
  • 是否有顯式指定命名空間,若無,則會使用service account的命名空間
# 指令基本架構
kubectl [動作COMMAND] [資源類型TYPE] [資源名稱NAME] [進階選項FLAGS]
# 例如: 取得名稱為tmp-shell的pod, ouput內容有較多(wide)的資訊
kubectl get pods tmp-shell -o wide

https://ithelp.ithome.com.tw/upload/images/20240806/20168178BP5ldOJ4U5.png

不懂就問(help!),指令後直接下-h可取得說明及範例,或由文件查詢,後續將隨主題介紹常用指令
https://ithelp.ithome.com.tw/upload/images/20240806/20168178XuQAf0r6eO.png

指令文件: Command line tool (kubectl)

👉 imperative(命令式) vs declarative(宣告式)

管理Kubernetes Object的指令,可以用命令式簡易設置,使用部分預設的配置,或是宣告式方式,以文件敘述狀態,各有其優缺點,根據使用情境決定

https://ithelp.ithome.com.tw/upload/images/20240806/201681789ANAZzj71o.png

# 建立deployment, 名稱為nginx, image為nginx
# 1. imperative 
kubectl create deployment nginx --image nginx
# 2. declarative: 資訊提供於檔案 
kubectl apply -f nginx.yaml
# 建立deployment需撰寫的文件: nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

🧾 Object配置文件(manifest)的格式

必填四大欄位【Required fields】

  1. apiVersion: 建立Object使用的API版本,依照功能或版本進行分類
    • 查看版本: kubectl api-resources
    • https://ithelp.ithome.com.tw/upload/images/20240806/20168178iDpFLnmkip.png
  2. kind 要建立的Object,像是Pod, Service等,需區分大小寫(case sensitive)
  3. metadata: 基本資訊,像是名稱、命名空間(namespace)
  4. spec: object規格(specification),內容根據object類型有所不同,格式說明:
    • 字典dictionary(無序) 鍵值對 KEY: VALUE,冒號後空一格,階層之間以空格區分(dictionary in dictionary),無強制規定要空幾格,同層空相同格數即可,習慣上以空2格區分
      • 例如: metadata下的name
    • 清單List(有序): 以連字符「-」表示
      • 例如: containers底下有list
    • 字典清單List of dictionary: 將屬於同item的內容綁定為一組
      • 例如: container底下的list,有一個item,內含name, image及ports這些dictionary
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template: # deployment 需有的欄位,給containers用的模板
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

上一篇
Day1: Kubernetes 架構與叢集元件
下一篇
Day3- 容器與他們的產地 fantastic containers and where to find them- 上
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言